// pages/recipeList/recipeList.js

import Api from '../../utils/Api';
import Config from '../../utils/Config';

Page({

    /**
     * 页面的初始数据
     */
    data: {
        pageType: '',
        recipeList: [],
        navTitle: '菜谱列表',
        // 页码数
        pageNum: 0,
        // 最大页码数
        maxPageNum: 0,
        // 每页显示的个数
        limit: 20,
        // 列表菜单总数
        recipeAllNum: 0
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: async function (options) {
        wx.showNavigationBarLoading();
        console.log(options)
        let pageType = options.type;
        this.setData({
            pageType
        });
        // 页面标题
        let navTitle = '';
        // 设置表名
        let tableName = Config.tableName.recipesTable;
        this.setData({
            tableName
        })
        // 查询条件
        let where = {};
        // 排序方式
        let sort = {};
        // 分类页面
        if (pageType == 'cate') {
            console.log('分类页面');
            let recipeTypeId = options.recipeTypeId;
            navTitle = options.cateName;
            // 设置条件
            where = {
                recipeTypeId,
                status:1
            };
            // 设置排序方式
            sort = {
                createDate: -1
            }
            this.setData({
                recipeTypeId,
                navTitle,
                where,
                sort
            });
        }
        // 搜索页面
        else if (pageType == 'search') {
            // 搜索关键字
            let searchText = options.searchText;
            navTitle = searchText;
            // 将搜索关键字保存到搜索表中
            this.addSearchText(searchText);
            this.addLoaclSearchText(searchText);
            // 设置条件
            where = {
                recipeName: Api.db.RegExp({
                    regexp: searchText,
                    options: 'i'
                }),
                status:1
            }
            // 设置排序方式
            sort = {
                createDate: -1
            },
            this.setData({
                navTitle,
                where,
                sort,
                searchText
            });

        }
        // 我的菜谱分类
        else if (pageType == 'myCate') {
            // 标题
            navTitle = options.typeName;
            // 获取分类id
            let recipeTypeId = options.recipeTypeId;
            // 获取用户openid
            let _openid = wx.getStorageSync('_openid');
            // 设置条件
            where = {
                recipeTypeId: recipeTypeId,
                _openid: this.data._openid,
                status:1
            }
            // 设置排序方式
            sort = {
                createDate: -1
            }
            this.setData({
                recipeTypeId,
                _openid,
                navTitle,
                where,
                sort
            });
        }
        // 热门菜单列表
        else if(pageType == 'hotRecipe'){
            navTitle = '热门菜谱';
            where = {
                status:1
            };
            sort = {
                views:-1
            };
            this.setData({
                // 允许请求一次数据
                allowOnce:true,
                navTitle,
                where,
                sort
            });
        }
        // 获取数据总数
        await this.getRecipeAllNum(tableName, where);
        // 获取数据
        this.getData();
        // 修改标题
        wx.setNavigationBarTitle({
            title: this.data.navTitle
        });
    },
     onShow: async function(){
        console.log(1);
        this.getData('update');
    },
    // 根据条件获取数据
    getData(type) {
        // 获取数据
        if(type=='update'){
            this.setData({
                pageNum:0
            });
        }
        this.getRecipeData(this.data.tableName, this.data.where,this.data.sort,type);
    },
    // 获取菜单列表
    async getRecipeData(tableName, where = {}, sort = {},type) {
        /* 
            tableName:表名 必填
            where：查询条件 非必填
            sort:排序方式  非必填
        */
        // 判断是否还有数据
        console.log(this.data.maxPageNum,this.data.pageNum);
        if (this.data.maxPageNum <= this.data.pageNum || this.data.allowOnce == false) {
            wx.showToast({
                title: this.data.maxPageNum==0?'暂无数据':'没有更多数据了哦',
                icon: 'none'
            });
            wx.hideNavigationBarLoading();
            return;
        }
        if(this.data.allowOnce){
            this.setData({allowOnce:false});
        }
        // 获取数据
        let result = await wx.cloud.callFunction({
            name: 'getLimitData',
            data: {
                tableName,
                skip: this.data.pageNum,
                limit: 20,
                where: where,
                sort: sort
            }
        });
        // 页码数加一,添加数据
        if(type=='update'){
            this.setData({
                recipeList: result.result.list
            });
        }else{
            this.setData({
                recipeList: this.data.recipeList.concat(result.result.list)
            });
        }
        this.setData({
            pageNum: this.data.pageNum + 1
        });
        console.log(this.data.pageNum);
        wx.hideNavigationBarLoading();
        console.log(result.result.list)
    },
    // 获取菜单总数
    async getRecipeAllNum(tableName, where = {}) {
        // 获取列表总数
        let recipeAllNum = (await Api.getDataCount(tableName, where)).total;
        // 计算有多少页
        let maxPageNum = Math.ceil(recipeAllNum / this.data.limit);

        this.setData({
            recipeAllNum,
            maxPageNum
        });

    },
    // 保存搜索关键字添加到搜索关键字表中
    async addSearchText(searchText) {
        let tableName = Config.tableName.searchKeywordsTable;
        // 先判断是否存在该关键字
        let searchDataArr = (await Api.filterData(tableName, {
            searchText
        })).data;
        // 如果没有该字段,则添加该字段
        if (searchDataArr.length == 0) {
            Api.addData(tableName, {
                searchText,
                searchCount: 1
            });
        }
        // 如果有，则搜索次数+1
        else {
            Api.updateById(tableName, searchDataArr[0]._id, {
                searchCount: Api.db.command.inc(1)
            });
        }
    },
    // 保存搜索关键字到本地
    async addLoaclSearchText(searchText) {
        // 获取本地搜索列表
        let mySearch = wx.getStorageSync('mySearch');
        console.log(mySearch);
        // 判断是否有值
        if (mySearch) {
            // 在头部添加
            mySearch.unshift(searchText);
            // 去重
            let setMySearch = new Set(mySearch);
            mySearch = Array.from(setMySearch);
            // 重新保存到storage
            wx.setStorage({
                data: mySearch,
                key: 'mySearch'
            });
        } else {
            // 没有就直接添加一个新的到本地
            wx.setStorage({
                data: [searchText],
                key: 'mySearch'
            });
        }
    },
    onReachBottom(){
        this.getData();
    }
})